package com.hanamaki.operator;

/**
 * 逻辑运算符
 *  * 与 （and）   &&
 *  * 或  （or）   ||
 *  * 非  （取反）  !
 *  * 异或 （比较二进制数）    ^
 */
public class Demo06 {

    public static void main(String[] args) {


        boolean a = true;
        boolean b = false;

        // 逻辑与运算  ，逻辑运算符两边的 条件都为真 逻辑与才为真  有一个为假 则为假
        System.out.println("a && b：" + (a && b));

        // 逻辑或运算 ， 辑运算符两边的 条件有一个为真 逻辑或就 为真
        System.out.println("a || b：" + (a || b));

        // 逻辑 非 ，如果比较 结果为真 取反就为假  为假取反 就为真
        System.out.println("!(a && b)：" + !(a && b));
        // 逻辑非  取反 操作
        System.out.println(!b);

        // 短路运算
        int c = 5;
        // 短路运算：c不小于 4 程序不会向下执行，所以c++还是 5
        boolean d = (c < 4) && (c++ < 4);
        System.out.println(d);
        System.out.println(c);


        // 异或运算
        // 比较两个十进制数的二进制数中每一位 是否相等
        /**
         * 3:   0   0  1    1
         * 9:   1   0   0   1
         * ---------------------
         *      1   0   1   0
         * 将比较完之后的  二进制数字 转换为 10进制数
         *      10
         */
        int x = 2; // 1 0
        int y = 3; // 1 1
        //-------------------
        //            0 1
        //-----------------
        //              1
        System.out.println(x ^ y);


        System.out.println(3 ^ 9); //0  0  1 1          1    0   0   1
    }
}
